题意:$n$个点组成一棵树,每个点都有一个领导力和费用,可以让一个点当领导,然后在这个点的子树中选择一些费用之和不超过$m$的点,得到领导的领导力乘选择的点的个数(领导可不被选择)的利润。求利润最大值。 $n\leqslant100000$;
每个点构造一个大根堆,堆里的就是这个点的人。
往父亲那里合并堆,记录堆的大小,费用的总和。
从儿子合并完毕后,在每个节点,不断踢出费用最大的人,直到费用的总和$\leqslant m$这就是这个点的最优方案了。(显然,花费最小的都留下了)
对于每个点,用这个点的领导力乘堆的大小尝试更新答案即可。
注意:和子树合并的时候,$rt[x]=merge(rt[x],rt[y])$注意是$rt[y]$因为这才是$y$的所属堆的入口。
1 |
|